home *** CD-ROM | disk | FTP | other *** search
/ PC Media 7 / PC MEDIA CD07.iso / share / prog / cm / cmobjref.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  1994-09-06  |  2.6 KB  |  91 lines

  1. // CmObjRef.cpp
  2. // -----------------------------------------------------------------
  3. // Compendium - C++ Container Class Library
  4. // Copyright (C) 1992-1994, Glenn M. Poorman, All rights reserved
  5. // -----------------------------------------------------------------
  6. // Object reference implementation used internally by the reserve.
  7. // -----------------------------------------------------------------
  8.  
  9. #include <cm/include/cmobjref.h>
  10.  
  11.  
  12. // Initialize the compare policy value.
  13. //
  14. int CmObjectReference::_compareBy = CmObjectReference::OBJECTS;
  15.  
  16.  
  17. // "CmObjectReference" is a reference constructor.
  18. //
  19. CmObjectReference::CmObjectReference(int k) : _key(k), _object(NULL)
  20. {}
  21.  
  22.  
  23. // "CmObjectReference" is a reference constructor.
  24. //
  25. CmObjectReference::CmObjectReference(CmObject* o) : _key(0), _object(o)
  26. {}
  27.  
  28.  
  29. // "CmObjectReference" is a reference constructor.
  30. //
  31. CmObjectReference::CmObjectReference(int k, CmObject* o)
  32.                  : _key(k), _object(o)
  33. {}
  34.  
  35.  
  36. // "isEqual" compares the specified object with this reference using
  37. // the current compare policy.
  38. //
  39. Bool CmObjectReference::isEqual(CmObject* pObj) const
  40. {
  41.   if (!pObj->isA("CmObjectReference")) return CmObject::isEqual(pObj);
  42.   CmObjectReference *pRef = (CmObjectReference*) pObj;
  43.   if (CmObjectReference::_compareBy == CmObjectReference::KEYS)
  44.     return (_key == pRef->_key) ? TRUE : FALSE;
  45.   else
  46.     return (_object == pRef->_object) ? TRUE : FALSE;
  47. }
  48.  
  49.  
  50. // "compare" compares the specified object with this reference using
  51. // the current compare policy.
  52. //
  53. int CmObjectReference::compare(CmObject* pObj) const
  54. {
  55.   if (!pObj->isA("CmObjectReference")) return CmObject::compare(pObj);
  56.   CmObjectReference *pRef = (CmObjectReference*) pObj;
  57.   if (CmObjectReference::_compareBy == CmObjectReference::KEYS)
  58.     return ((_key == pRef->_key) ? 0 : ((_key > pRef->_key) ? 1 : -1));
  59.   else
  60.     return ((_object==pRef->_object) ? 0 : ((_object>pRef->_object) ? 1 : -1));
  61. }
  62.  
  63.  
  64. // "hash" performs a hash on the key value or object pointer depending
  65. // on the current compare policy value.
  66. //
  67. unsigned CmObjectReference::hash(unsigned m) const
  68. {
  69.   if (CmObjectReference::_compareBy == CmObjectReference::KEYS)
  70.     return (unsigned) _key % m;
  71.   else
  72.     return (unsigned) _object % m;
  73. }
  74.  
  75.  
  76. // "compareBy" sets the compare policy value.
  77. //
  78. void CmObjectReference::compareBy(int cb)
  79. {
  80.   if (cb == CmObjectReference::KEYS || cb == CmObjectReference::OBJECTS)
  81.     CmObjectReference::_compareBy = cb;
  82. }
  83.  
  84.  
  85. // "compareBy" returns the current compare policy value.
  86. //
  87. int CmObjectReference::compareBy()
  88. {
  89.   return CmObjectReference::_compareBy;
  90. }
  91.